//#include<bits/stdc++.h>//万能头文件
#include<iostream>
#include<algorithm>
#include<list>
#include<vector>
using namespace std;

template<typename Container,typename T>
void Remove(Container&v,const T&t)
{
    for(auto ite=v.begin();ite!=v.end();)
    {
        if(*ite==t)
        {
            ite=v.erase(ite);
        
        }
        else
        ite++;
    }
}

template<typename iterator>
void RandomShuffle(iterator start,iterator end)
{
if(start!=end)
for(auto i=start+1;i<end;++i)
{
    auto j=start+rand()%((i-start)+1);
    if (i!=j)
    {
        swap(*i,*j);
    }
}
}


int main()
{
    
    //for_each(v.begin(),v.end(),[](int a){cout<<a<<" ";});
    //cout<<count(v.begin(),v.end(),2);
    
    //cout<<count_if(v.begin(),v.end(),[](int a){return a%2!=0;});
    //cout<<*min_element(v.begin(),v.end());
    // auto ite=find(v.begin(),v.end(),3);
    // //找不到返回end迭代器
    // if(ite!=v.end())
    // {
    //     cout<<*ite;
    // }
    //查找n个连续的值，返回第一个的迭代器
    //auto ite=search_n(v.begin(),v.end(),2,2);

    //在前一个区间找后一个区间  返回找到的在第一个区间的迭代器
    // auto ite=search(v.begin(),v.end(),v.begin(),v.end());
    // cout<<*ite<<endl;
    // auto ite=find_end(v.begin(),v.end(),v1.begin(),v1.end());
    // cout<<*ite<<endl;
    //在第一个区间中找第二个区间中第一次出现的元素
    //auto ite=find_first_of(v.begin(),v.end(),v1.begin(),v1.end());
    //找两个连续相等的元素
    //auto ite=adjacent_find(v.begin(),v.end());
    // vector<int>v = {2,3,3,4,5};
    // vector<int>v1={2,3,4};
    // string v="hello";
    // string v1="hollo";
    // auto piar=mismatch(v.begin(),v.end(),v1.begin(),v1.end());
    // cout<<*piar.first<<" "<<*piar.second<<endl;
    
    //变动型算法一定要先留足空间,
    // vector<int>v = {1,3,3,5,5};
    // list<int> l;
    // l.resize(v.size());
    //copy_backward(v.begin(),v.end(),l.end());
    //transform(v.begin(),v.end(),l.begin(),[](int a){return a*2;});
    

    // vector<int> v2;
    // v2.resize(v.size()+l.size());

    // merge(v.begin(),v.end(),l.begin(),l.end(),v2.begin());

    //swap_ranges(v.begin(),v.end(),l.begin());
    //数组用fill list用 fill_n
    //fill(v.begin(),v.end(),0);
    //fill_n(v.begin(),3,0);
    // int a=0;
    // generate(v.begin(),v.end(),[&a](){return ++a;});
    
    // vector<int>v = {1,2,3,4,5};
    // vector<int>v1 ;
    // v1.resize(v.size());


    // //replace(v.begin(),v.end(),1,99);
    // replace_copy(v.begin(),v.end(),v1.begin(),1,99);

    //移除型
    
    //remove(v.begin(),v.end(),3);
    //Remove(v,3);
    //reverse(v.begin(),v.end());
    //rotate(v.begin(),v.begin()+2,v.end());
    
    
    //全排列 一个数列从小到大 到从大到小的全部可能情况
    //next_permutation(v.begin(),v.end());
    //next_permutation(v.begin(),v.end());
    // srand(time(nullptr));
    // random_shuffle(v.begin(),v.end());//洗牌算法
    
    //稳定
    //stable_partition(v.begin(),v.end(),[](int a){return a%2==0;});
    
    //排序性算法
    


    //size<16 插入排序
    //> 16 递归深度归0 堆排序
    // 不为0 快速排序
    //sort(v.begin(),v.end(),greater<int>());

    //<15 插入排序
    //> 15 分组 插入    归并
    //stable_sort(v.begin(),v.end(),greater<int>())
    
    //vector<int>v = {6,5,3,4,2};
    //堆排序
    //partial_sort(v.begin(),v.begin()+2,v.end(),greater<int>());
    
    //只排第n个元素
    //nth_element(v.begin(),v.begin(),v.end());
    
    
    // make_heap(v.begin(),v.end());
    // v.push_back(1);
    // push_heap(v.begin(),v.end());//塞入一个新元素以后，再构建堆

    // sort_heap(v.begin(),v.end());
    // for_each(v.begin(),v.end(),[](int a){a;cout<<a<<" ";});

    //已序算法
    //vector<int>v1={2,3};
 
    //cout<<binary_search(v.begin(),v.end(),2)<<endl;
    
    //cout<<includes(v.begin(),v.end(),v1.begin(),v1.end())<<endl;
    //大于等于
    //cout<<*lower_bound(v.begin(),v.end(),2)<<endl;
    //大于
    //cout<<*upper_bound(v.begin(),v.end(),2)<<endl; 
    
    // auto pair=equal_range(v.begin(),v.end(),2);
    // cout<<distance(v.begin(),pair.first)<<endl;
    // cout<<distance(v.begin(),pair.second)<<endl;
    
   vector<int> v={1,2,3,4,5};
   vector<int>v1={2,3,6};
   vector<int>reslut;
   reslut.resize(v.size()+v1.size());
   
   //set_union(v1.begin(),v1.end(),v.begin(),v.end(),reslut.begin());
   //set_intersection()交集
   //set_difference()补集（我有你没有）
   //set_symmetric_difference()补集
    inplace_merge(v1.begin(),v1.begin()+3,v1.end());
    for_each(reslut.begin(),reslut.end(),[](int& a){cout<<a<<endl;});


    return 0;
}